RoR_chapter2 railsの環境構築
RoR_chapter2 railsの環境構築
RubyGems
Rubyのパッケージ管理ツール。
Rubyのverが1.9以降なら、rubyをインストールした際に一緒についてくる
Bundler
プロジェクトで使うgemを束ねて、どのgemのどのverが必要なのかを明示する仕組み
Gemfileというファイルがありそこにgemの名前を記載しておくと、bundlerがそれに沿ってインストールしてくれる
bundle経由でgemをインストールすることで、開発環境のズレを防ぐ。
gem install bundler -v 2.3.26 をローカルには入れた。
Railsのインストール
コケたので備忘録
code:rb
gem install rails -v 5.2.1
ERROR: While executing gem ... (Gem::RemoteFetcher::FetchError)
rbenvを新しくする
brew reinstall rbenv
rubyをrbenv経由でインストールする
rbenv install 2.5.1
rbenv global 2.5.1
rbenvでrubyを管理できていると、以下のようなパスになる
which ruby
# /Users/skoni/.rbenv/shims/ruby rbenv管理版
# /usr/bin/ruby pc内に入ったrubyになっている
railsインストール試したが、また上と同じエラー
gemのバージョンもあげてみる
gem --version
2.7.6
gem update --system 2.7.11
エラー
code:txt
言われた通りに入れていく
gem install rails -v 5.2.1
ERROR: Error installing rails:
The last version of nokogiri (>= 1.6) to support your Ruby & RubyGems was 1.12.5. Try installing it with gem install nokogiri -v 1.12.5 and then running the current command again
gem install nokogiri -v 1.12.5 した。
次:
ERROR: Error installing rails:
The last version of net-protocol (>= 0) to support your Ruby & RubyGems was 0.1.2. Try installing it with gem install net-protocol -v 0.1.2 and then running the current command again
gem install net-protocol -v 0.1.2 した。
次
gem install net-smtp -v 0.3.0
gem install net-imap -v 0.2.2
...
できたっぽい
rails -v
Rails 5.2.1
Postgresqlを使う
code:txt
postgres -V
postgres (PostgreSQL) 14.6 (Homebrew)
# 起動
brew services start postgresql
# 停止
brew services stop postgresql
# 中に入るテスト
psql postgres
エラー
psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
なんか色々面倒だ...コンテナでやった方がいいかも...
調べる
brew doctorというのがかなりいいらしい
言われた通りに進めてみる
わからんので消す
brew uninstall --force postgresql
ちゃんとここのファイルも全部消す!
ls -l /usr/local/var/postgres
code:txt
brew services start postgresql@14 (git)-master Bootstrap failed: 5: Input/output error
Try re-running the command as root for richer errors.
Error: Failure while executing; /bin/launchctl bootstrap gui/501 /Users/skoni/Library/LaunchAgents/homebrew.mxcl.postgresql@14.plist exited with 5.
に沿って、停止→起動をする
rew services stop postgresql@14 (git)-master Stopping postgresql@14... (might take a while)
==> Successfully stopped postgresql@14 (label: homebrew.mxcl.postgresql@14)
current: ~/Desktop/study/genba_ruby_on_rails
brew services start postgresql@14 (git)-master ==> Successfully started postgresql@14 (label: homebrew.mxcl.postgresql@14)
psql (14.6 (Homebrew))
Type "help" for help.
postgres=#
ついた!
やっとついた
Railsディレクトリを作ろう
やっと
rails new scaffold_app -d postgresql
bundle installが自動で行われ、gemも色々入れてくれる
scaffold_appというディレクトリが、コマンドを打った直下にできる
DBを作ろう
bin/rails db:create
起動する
bin/rails s
まずはユーザー管理アプリケーションを作ってみる
ユーザー管理画面の雛形を作る
ユーザーに関するscaffoldを作ろう
code:ruby
bin/rails generate scaffold user name:string address:string age:integer
bin/rails db:migrate
scaffold
Railsのコマンドの一つ
ルーティング、コントローラ、ビュー、モデルとテーブルの記述やファイルなどを自動生成してくれる
MVCなどを生成してくれる便利コマンドというわけだ
code:rb
rails g scaffold モデル名 カラム:データ型 カラム:データ型....
基本的なCRUD構造を作ってくれる
コードを追いかける
まずはルーティングを参考に(後述)、コントローラのindexメソッドが呼ばれる。
code:users_controller.rb
class UsersController < ApplicationController
# GET /users or /users.json
def index
@users = User.all
end
before_action
indexなどのアクションメソッドが呼ばれる前に行いたい処理(フィルタ)を指定できる
4章で説明する。
indexでは、Userモデルからユーザーに関する情報を取得している。
モデルはDBとRubyオブジェクトのやりとりを簡易化してくれる(CRUD処理など)。
code:user.rb
class User < ApplicationRecord
end
何も記述がないが、DBとやりとりするための仕組みは親のコードから引き継いでいる
次にビュー。
app/views/コントローラ名/アクション名.html.erbというファイルが呼ばれる
この例だと、app/views/users/index.html.erb
ビューなどで、よく見るlink_toなどのメソッドが使われる。これがヘルパメソッド
いろんなヘルパメソッドがある
code:index.html.erb
<td>
<%= link_to 'Edit', edit_user_path(user) %> <!-- パスを生成するメソッドとか -->
</td>
アプリケーションのヘッダー、フッターはlayoutsフォルダで管理されている。
2_chapter/scaffold_app/app/views/layouts/application.html.erb
<%= yield %>と書かれているところに、対応するビューファイルが入る。
indexアクションが呼ばれたなら、このテンプレートにはindex.html.erbが入る
ディレクトリ構造を追う
<アプリケーションフォルダ>
app: 主要プログラム
assets: スタイルシートや画像、js
config: アセットパイプライン用の設定ファイル
images
javascripts
stylesheets
channnels: ActionTableファイル
controllers
concerns: 複数のコントローラ間で使う共通処理
helpers: ビューの共通処理を定義するヘルパファイル
jobs: バックグラウンドでジョブを実行する際に利用する
mailers: ActionMailer用のファイル
models
concerns: 複数モデルで使う共通処理
views
layouts
bin: スクリプトファイル
config: 設定ファイル
environments: 環境変数
initializers: 初期化用のファイル
locales: 他言語に対応するための辞書ファイル
db
migrate
lib: 自作ライブラリ
assets: 自作ライブラリ用のアセットファイル(js/スタイルシートなど)
tasks: 自作のRakeタスク
log
public: 静的ファイル
storage
test: テスト用のファイル
tmp: 一時用ファイル
vendor: 外部ライブラリ用
configファイルの中を追ってみる
config
application.rb: アプリ共通設定
boot.rb
cable.yml
credentials.yml.enc: 暗号化情報の設定
database.yml: DB接続設定。大事 ⛳️
environment.rb 環境ごとの設定。デフォルトで以下が入っている
development.rb
production.rb
test.rb
initializers
色々入ってる(P73参照)
locales
en.yml: 他言語対応用の辞書ファイル
master.key: credentials.yml.encの復号に使うキー
puma.rb: puma用の設定ファイル
routes.rb: ルーティング。大事 ⛳️
spring.rb
storage.yml
色々入っているが、DBの設定とルーティングを弄ることが多い。
database/yml
production,development,testの3環境について設定が記述されている。
ymlは人間に優しい、インデントで階層構造がわかる記法
code:yml
development:
<<: *default
database: scaffold_app_development
これは、defaultの記述情報をここにも適用するよというymlの記述方式。
railsはこれをハッシュとして読み込むことができるので、よく使う
routes.rb
ルーティング定義ファイル
code:rb
Rails.application.routes.draw do
resources :users
end
resources :usersという記述が、CRUD機能全てのルーティングを一括で定義している記述になる
見てみる
code:txt
bin/rails routes
// これで定義中のルーティング全てを見ることができる
Prefix Verb URI Pattern Controller#Action
users GET /users(.:format) users#index
この例なら、URI Patternの部分には、users_controllerのindexが対応するという記述
RailsのMVC(P77~)
MVC
UIを持つソフトウェアアーキテクチャの一種。
詳しく知りたいなら別途チェックする